package org.edu.modules.oa.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.shiro.SecurityUtils;
import org.apache.xmlbeans.impl.piccolo.xml.DocumentEntity;
import org.edu.common.system.vo.LoginUser;
import org.edu.modules.oa.entity.VeFileFilesEntity;
import org.edu.modules.oa.entity.VeOaDocumentEntity;
import org.edu.modules.oa.entity.VeOaTongxunluEntity;
import org.edu.modules.oa.mapper.IVeFileFilesMapper;
import org.edu.modules.oa.mapper.IVeOaTongxunluMapper;
import org.edu.modules.oa.mapper.VeOaDocumentMapper;
import org.edu.modules.oa.service.IVeOaPersonDocumentService;
import org.edu.modules.oa.vo.VeOaDocumentVo;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;

@Service
public class VeOaPersonDocumentServiceImpl extends ServiceImpl<VeOaDocumentMapper,VeOaDocumentEntity> implements IVeOaPersonDocumentService{

    @Resource
    private VeOaDocumentMapper iVeOaDocumentMapper;
    @Resource
    private IVeFileFilesMapper iVeFileFilesMapper;
    //自己的接口
    @Resource
    private IVeOaPersonDocumentService iVeOaPersonDocumentService;
    //事务管理器
    @Resource(name="transactionManager")
    private DataSourceTransactionManager transactionManager;


    // 根据父级ID查询      查询条件--名称，文档编号，上传人，上传时间  (删除字段)
    @Override
    public HashMap<String, Object> selectDocument(VeOaDocumentEntity veOaDocumentEntity, Integer startPage, Integer pageSize) {
        // 调用mybatisplus的分页
        IPage<VeOaDocumentEntity> page=new Page<>(startPage,pageSize);
        //拼接查询条件
        QueryWrapper<VeOaDocumentEntity> queryWrapper = new QueryWrapper<>();
        if (veOaDocumentEntity.getDocName() != null && !veOaDocumentEntity.getDocName().equals("")){
            queryWrapper.like("DOC_NAME",veOaDocumentEntity.getDocName());
        }
        if (veOaDocumentEntity.getDocCode() != null && !veOaDocumentEntity.getDocCode().equals("")){
            queryWrapper.like("DOC_CODE",veOaDocumentEntity.getDocCode());
        }
        if (veOaDocumentEntity.getCreateUserName() != null && !veOaDocumentEntity.getCreateUserName().equals("")){
            queryWrapper.like("Create_UserName",veOaDocumentEntity.getCreateUserName());
        }
        if (veOaDocumentEntity.getCreateTime() != null && !veOaDocumentEntity.getCreateTime().equals("")){
            //queryWrapper.apply("date_format(CREATE_TIME, 'yyyy-MM-dd') = {0}",veOaDocumentEntity.getCreateTime());
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(veOaDocumentEntity.getCreateTime());
            calendar.add(calendar.DATE,1); //把日期往后增加一天,整数  往后推,负数往前移动
            Date nextDay=calendar.getTime(); //这个时间就是日期往后推一天的结果
            queryWrapper.between("CREATE_TIME",veOaDocumentEntity.getCreateTime(),nextDay);
        }
        //父级ID
        if (veOaDocumentEntity.getParentId() != null){
            queryWrapper.eq("PARENT_ID",veOaDocumentEntity.getParentId());
        }
        //删除字段
        if (veOaDocumentEntity.getIsDeleted() != null){
            queryWrapper.eq("IS_DELETED",veOaDocumentEntity.getIsDeleted());
        }
        //文档类型
        if (veOaDocumentEntity.getDocType() != null && !veOaDocumentEntity.getDocType().equals("")){
            queryWrapper.eq("DOC_TYPE",veOaDocumentEntity.getDocType());
        }
        //是否共享 0是1否
        if (veOaDocumentEntity.getIsShare() != null){
            queryWrapper.eq("IS_SHARE",veOaDocumentEntity.getIsShare());
        }

        queryWrapper.orderByDesc("CREATE_TIME");
        //条件+分页查询
        page = iVeOaDocumentMapper.selectPage(page,queryWrapper);
        List<VeOaDocumentEntity> entityList = page.getRecords();
        // for循环把需要用的字段加到 导出集合里面去  其中通过每个fileId查附件信息
        List<VeOaDocumentVo> voList = new ArrayList<>();
        for (VeOaDocumentEntity en:entityList){
            if (en.getFileId() != null){
                //文件id
                veOaDocumentEntity.setFileId(en.getFileId());
            }
            //用fileid查附件信息
            QueryWrapper<VeFileFilesEntity> fileWrapper = new QueryWrapper<>();
            fileWrapper.eq("id",en.getFileId());
            VeFileFilesEntity filesEntity = iVeFileFilesMapper.selectOne(fileWrapper);

            VeOaDocumentVo vo = new VeOaDocumentVo();
            //序号
            vo.setId(en.getId());
            //名称
            vo.setDocName(en.getDocName());
            //文档编号
            vo.setDocCode(en.getDocCode());
            //父级id
            vo.setParentId(en.getParentId());

            //发送时间（时间类型转换成字符串）
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            vo.setCreateTime(formatter.format(en.getCreateTime()));
            //上传人id name
            vo.setCreateUserId(en.getCreateUserId());
            vo.setCreateUserName(en.getCreateUserName());
            vo.setIsDeleted(en.getIsDeleted());
            //IDtype  判断是文件夹/文件
            if (en.getIdType() == 0){
                vo.setIdType("文件夹");
            }else {
                vo.setIdType("文件");
            }
            //备注
            vo.setBeizhu(en.getBeizhu());

            //是否共享
            vo.setIsShare(en.getIsShare());
            //可查看人员id
            vo.setSeeUserIdList(en.getSeeUserIdList());
            //可查看人员
            vo.setSeeUserNameList(en.getSeeUserNameList());
            //可添加人员id
            vo.setAddUserIdList(en.getAddUserIdList());
            //可添加人员
            vo.setAddUserNameList(en.getAddUserNameList());
            //可修改人员id
            vo.setUpdateUserIdList(en.getUpdateUserIdList());
            //可修改人员
            vo.setUpdateUserNameList(en.getUpdateUserNameList());
            //可删除人员id
            vo.setDeleteUserIdList(en.getDeleteUserIdList());
            //可删除人员
            vo.setDeleteUserNameList(en.getDeleteUserNameList());
            if (filesEntity != null){
                //文件大小
                vo.setSize( (filesEntity.getSize() / 1024) );
                //文件类型
                vo.setExt(filesEntity.getExt());
                //文件存储url
                vo.setSourceFile(filesEntity.getSourceFile());
            }
            voList.add(vo);
        }
        //查询表格总行数
        int count = iVeOaDocumentMapper.selectCount(queryWrapper);
        //把查出来的东西存到map里面去
        HashMap<String,Object> map = new HashMap<>();
        map.put("list",voList);
        map.put("count",count);
        return map;
    }

    //查看详情
    @Override
    public VeOaDocumentVo seeDocDetail(VeOaDocumentEntity veOaDocumentEntity) {
        QueryWrapper<VeOaDocumentEntity> queryWrapper = new QueryWrapper<>();
        if (veOaDocumentEntity.getId() != null){
            queryWrapper.eq("ID",veOaDocumentEntity.getId());
        }
        VeOaDocumentEntity en = iVeOaDocumentMapper.selectOne(queryWrapper);
        //通过fileId查文件
        QueryWrapper<VeFileFilesEntity> fileWrapper = new QueryWrapper<>();
        fileWrapper.eq("id",en.getFileId());
        VeFileFilesEntity filesEntity = iVeFileFilesMapper.selectOne(fileWrapper);

        VeOaDocumentVo vo = new VeOaDocumentVo();
        //序号
        vo.setId(en.getId());
        //名称
        vo.setDocName(en.getDocName());
        //文档编号
        vo.setDocCode(en.getDocCode());
        //父级id
        vo.setParentId(en.getParentId());

        //发送时间（时间类型转换成字符串）
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        vo.setCreateTime(formatter.format(en.getCreateTime()));
        //上传人id name
        vo.setCreateUserId(en.getCreateUserId());
        vo.setCreateUserName(en.getCreateUserName());
        vo.setIsDeleted(en.getIsDeleted());
        //IDtype  判断是文件夹/文件
        if (en.getIdType() == 0){
            vo.setIdType("文件夹");
        }else {
            vo.setIdType("文件");
        }
        //备注
        vo.setBeizhu(en.getBeizhu());

        //是否共享
        vo.setIsShare(en.getIsShare());
        //可查看人员id
        vo.setSeeUserIdList(en.getSeeUserIdList());
        //可查看人员
        vo.setSeeUserNameList(en.getSeeUserNameList());
        //可添加人员id
        vo.setAddUserIdList(en.getAddUserIdList());
        //可添加人员
        vo.setAddUserNameList(en.getAddUserNameList());
        //可修改人员id
        vo.setUpdateUserIdList(en.getUpdateUserIdList());
        //可修改人员
        vo.setUpdateUserNameList(en.getUpdateUserNameList());
        //可删除人员id
        vo.setDeleteUserIdList(en.getDeleteUserIdList());
        //可删除人员
        vo.setDeleteUserNameList(en.getDeleteUserNameList());
        if (filesEntity != null){
            //文件大小
            vo.setSize( (filesEntity.getSize() / 1024) );
            //文件类型
            vo.setExt(filesEntity.getExt());
            //文件存储url
            vo.setSourceFile(filesEntity.getSourceFile());
        }


        return vo;
    }

    //同级下对文件（夹）名重复校验
    @Override
    public VeOaDocumentEntity checkNameByPid(VeOaDocumentEntity veOaDocumentEntity) {
        QueryWrapper<VeOaDocumentEntity> queryWrapper = new QueryWrapper<>();
        if (veOaDocumentEntity.getDocName() != null && !veOaDocumentEntity.getDocName().equals("")){
            queryWrapper.eq("DOC_NAME",veOaDocumentEntity.getDocName());
        }

        if (veOaDocumentEntity.getId() != null){
            queryWrapper.ne("ID",veOaDocumentEntity.getId());
        }
        if (veOaDocumentEntity.getParentId() != null){
            queryWrapper.eq("PARENT_ID",veOaDocumentEntity.getParentId());
        }
        //文档类型
        if (veOaDocumentEntity.getDocType() != null && !veOaDocumentEntity.getDocType().equals("")){
            queryWrapper.eq("DOC_TYPE",veOaDocumentEntity.getDocType());
        }
        //是否共享 0是1否
        if (veOaDocumentEntity.getIsShare() != null && !veOaDocumentEntity.getIsShare().equals("")){
            queryWrapper.eq("IS_SHARE",veOaDocumentEntity.getIsShare());
        }

        VeOaDocumentEntity documentEntity = iVeOaDocumentMapper.selectOne(queryWrapper);

        return documentEntity;
    }


    //添加文件和文件信息
    @Override
    public Integer addDocFile(VeOaDocumentEntity veOaDocumentEntity, VeFileFilesEntity veFileFilesEntity) {
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别，开启新事务，这样会比较安全些。
        TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
        Integer result = 0;

        try {
            //添加附件信息
            iVeFileFilesMapper.insert(veFileFilesEntity);
            //添加doc表
            veOaDocumentEntity.setFileId(String.valueOf(veFileFilesEntity.getId()));
            iVeOaDocumentMapper.insert(veOaDocumentEntity);

            transactionManager.commit(status);
            result = 1;
            System.out.println("一起成功");
        } catch (Exception e) {
            e.printStackTrace();
            transactionManager.rollback(status);
            System.out.println("一起失败");
            result = 0;
        }

        return result;
    }

    //新建文件夹
    @Override
    public Integer addDocDir(VeOaDocumentEntity veOaDocumentEntity) {
        Integer result = iVeOaDocumentMapper.insert(veOaDocumentEntity);
        return result;
    }

    //导出当前页记录   根据父级ID查询   查询条件--名称，文档编号，上传人，上传时间  (删除字段)
    @Override
    public List<VeOaDocumentVo> export(VeOaDocumentEntity veOaDocumentEntity,Integer startPage,Integer pageSize) {
        // 调用mybatisplus的分页
        IPage<VeOaDocumentEntity> page=new Page<>(startPage,pageSize);
        //拼接查询条件
        QueryWrapper<VeOaDocumentEntity> queryWrapper = new QueryWrapper<>();
        if (veOaDocumentEntity.getDocName() != null && !veOaDocumentEntity.getDocName().equals("")){
            queryWrapper.like("DOC_NAME",veOaDocumentEntity.getDocName());
        }
        if (veOaDocumentEntity.getDocCode() != null && !veOaDocumentEntity.getDocCode().equals("")){
            queryWrapper.like("DOC_CODE",veOaDocumentEntity.getDocCode());
        }
        if (veOaDocumentEntity.getCreateUserName() != null && !veOaDocumentEntity.getCreateUserName().equals("")){
            queryWrapper.like("Create_UserName",veOaDocumentEntity.getCreateUserName());
        }
        if (veOaDocumentEntity.getCreateTime() != null && !veOaDocumentEntity.getCreateTime().equals("")){
            //queryWrapper.apply("date_format(CREATE_TIME, 'yyyy-MM-dd') = {0}",veOaDocumentEntity.getCreateTime());
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(veOaDocumentEntity.getCreateTime());
            calendar.add(calendar.DATE,1); //把日期往后增加一天,整数  往后推,负数往前移动
            Date nextDay=calendar.getTime(); //这个时间就是日期往后推一天的结果
            queryWrapper.between("CREATE_TIME",veOaDocumentEntity.getCreateTime(),nextDay);
        }
        //父级ID
        if (veOaDocumentEntity.getParentId() != null){
            queryWrapper.eq("PARENT_ID",veOaDocumentEntity.getParentId());
        }
        //删除字段
        if (veOaDocumentEntity.getIsDeleted() != null){
            queryWrapper.eq("IS_DELETED",veOaDocumentEntity.getIsDeleted());
        }
        //文档类型
        if (veOaDocumentEntity.getDocType() != null && !veOaDocumentEntity.getDocType().equals("")){
            queryWrapper.eq("DOC_TYPE",veOaDocumentEntity.getDocType());
        }
        //是否共享 0是1否
        if (veOaDocumentEntity.getIsShare() != null && !veOaDocumentEntity.getIsShare().equals("")){
            queryWrapper.eq("IS_SHARE",veOaDocumentEntity.getIsShare());
        }
        queryWrapper.orderByDesc("CREATE_TIME");
        //queryWrapper.orderByAsc("ID");
        //条件+分页查询
        page = iVeOaDocumentMapper.selectPage(page,queryWrapper);
        List<VeOaDocumentEntity> entityList = page.getRecords();

        // for循环把需要用的字段加到 导出集合里面去  其中通过每个fileId查附件信息
        List<VeOaDocumentVo> voList = new ArrayList<>();
        for (VeOaDocumentEntity en:entityList){
            //用fileid查附件信息
            QueryWrapper<VeFileFilesEntity> fileWrapper = new QueryWrapper<>();
            fileWrapper.eq("id",en.getFileId());
            VeFileFilesEntity filesEntity = iVeFileFilesMapper.selectOne(fileWrapper);

            VeOaDocumentVo vo = new VeOaDocumentVo();
            //序号
            vo.setId(en.getId());
            //名称
            vo.setDocName(en.getDocName());
            //文档编号
            vo.setDocCode(en.getDocCode());
            //父级id
            vo.setParentId(en.getParentId());
            //发送时间（时间类型转换成字符串）
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            vo.setCreateTime(formatter.format(en.getCreateTime()));
            //上传人
            vo.setCreateUserName(en.getCreateUserName());
            //IDtype  判断是文件夹/文件
            if (en.getIdType() == 0){
                vo.setIdType("文件夹");
            }else {
                vo.setIdType("文件");
            }

            //备注
            vo.setBeizhu(en.getBeizhu());
            //文档类型
            vo.setDocType(en.getDocType());
            //是否共享
            /*vo.setIsShare(en.getIsShare());
            //可查看人员id
            vo.setSeeUserIdList(en.getSeeUserIdList());
            //可查看人员
            vo.setSeeUserNameList(en.getSeeUserNameList());
            //可添加人员id
            vo.setAddUserIdList(en.getAddUserIdList());
            //可添加人员
            vo.setAddUserNameList(en.getAddUserNameList());
            //可修改人员id
            vo.setUpdateUserIdList(en.getUpdateUserIdList());
            //可修改人员
            vo.setUpdateUserNameList(en.getUpdateUserNameList());
            //可删除人员id
            vo.setDeleteUserIdList(en.getDeleteUserIdList());
            //可删除人员
            vo.setDeleteUserNameList(en.getDeleteUserNameList());*/
            if (filesEntity != null){
                //文件大小
                vo.setSize( (filesEntity.getSize() / 1024) );
                //文件类型
                vo.setExt(filesEntity.getExt());
                //文件存储url
                vo.setSourceFile(filesEntity.getSourceFile());
            }


            voList.add(vo);
        }

        return voList;
    }

    //修改文件(夹)doc信息，上传的附件信息
    @Override
    public Integer updateDocFileDir(VeOaDocumentEntity veOaDocumentEntity, VeFileFilesEntity veFileFilesEntity) {
        QueryWrapper<VeOaDocumentEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("ID",veOaDocumentEntity.getId());
        Integer result = 0;
        //上传的文件不改，或改文件夹时
        /*if (veFileFilesEntity == null){
            result = iVeOaDocumentMapper.update(veOaDocumentEntity,queryWrapper);
        }
        if (veFileFilesEntity != null){
            //在对应的文件id上修改文件
            QueryWrapper<VeFileFilesEntity> fileWrapper = new QueryWrapper<>();
            fileWrapper.eq("id",veOaDocumentEntity.getFileId());
            result = iVeFileFilesMapper.update(veFileFilesEntity,fileWrapper);
            if (result != 0){
                result = iVeOaDocumentMapper.update(veOaDocumentEntity,queryWrapper);
            }

        }*/
        result = iVeOaDocumentMapper.updateById(veOaDocumentEntity);
        return result;
    }

    // 返回上一级      where ID =  当前父级ID   where PARENT_ID= 搜出父级ID  （搜出）返回到父级ID为空（0为顶级）时不可返回
    @Override
    public HashMap<String, Object> backToUpLevel(VeOaDocumentEntity veOaDocumentEntity, Integer startPage, Integer pageSize,Integer isDelete,String docType) {
        HashMap<String, Object> map = new HashMap<>();
        QueryWrapper<VeOaDocumentEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("ID",veOaDocumentEntity.getParentId());
        //搜出上级的父级ID
        VeOaDocumentEntity parentDocumentEntity = iVeOaDocumentMapper.selectOne(queryWrapper);
        if (parentDocumentEntity == null){
            //返回空的map
            return map;
        }
        //上级的父级ID有值时，查数据，只用parentID查
        //调用mp的分页
        IPage<VeOaDocumentEntity> page = new Page<>(startPage,pageSize);
        //拼接查询条件
        QueryWrapper<VeOaDocumentEntity> mainWrapper = new QueryWrapper<>();
        if (parentDocumentEntity.getParentId() != null){
            mainWrapper.eq("PARENT_ID",parentDocumentEntity.getParentId());
        }
        //删除字段
        if (parentDocumentEntity.getIsDeleted() != null){
            mainWrapper.eq("IS_DELETED",isDelete);
        }
        //文档类型
        if (parentDocumentEntity.getDocType() != null && !parentDocumentEntity.getDocType().equals("")){
            mainWrapper.eq("DOC_TYPE",veOaDocumentEntity.getDocType());
        }
        //是否共享 0是1否
        if (veOaDocumentEntity.getIsShare() != null){
            mainWrapper.eq("IS_SHARE",veOaDocumentEntity.getIsShare());
        }
        mainWrapper.orderByDesc("CREATE_TIME");

        //条件+分页查询
        page = iVeOaDocumentMapper.selectPage(page,mainWrapper);
        List<VeOaDocumentEntity> entityList = page.getRecords();
        // for循环把需要用的字段加到 导出集合里面去  其中通过每个fileId查附件信息
        List<VeOaDocumentVo> voList = new ArrayList<>();
        for (VeOaDocumentEntity en:entityList){
            //用fileid查附件信息
            QueryWrapper<VeFileFilesEntity> fileWrapper = new QueryWrapper<>();
            fileWrapper.eq("id",en.getFileId());
            VeFileFilesEntity filesEntity = iVeFileFilesMapper.selectOne(fileWrapper);

            VeOaDocumentVo vo = new VeOaDocumentVo();
            //序号
            vo.setId(en.getId());
            //名称
            vo.setDocName(en.getDocName());
            //文档编号
            vo.setDocCode(en.getDocCode());
            //父级id
            vo.setParentId(en.getParentId());

            //发送时间（时间类型转换成字符串）
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            vo.setCreateTime(formatter.format(en.getCreateTime()));
            //上传人id name
            vo.setCreateUserId(en.getCreateUserId());
            vo.setCreateUserName(en.getCreateUserName());
            vo.setIsDeleted(en.getIsDeleted());
            //IDtype  判断是文件夹/文件
            if (en.getIdType() == 0){
                vo.setIdType("文件夹");
            }else {
                vo.setIdType("文件");
            }
            //备注
            vo.setBeizhu(en.getBeizhu());

            //是否共享
            vo.setIsShare(en.getIsShare());
            //可查看人员id
            vo.setSeeUserIdList(en.getSeeUserIdList());
            //可查看人员
            vo.setSeeUserNameList(en.getSeeUserNameList());
            //可添加人员id
            vo.setAddUserIdList(en.getAddUserIdList());
            //可添加人员
            vo.setAddUserNameList(en.getAddUserNameList());
            //可修改人员id
            vo.setUpdateUserIdList(en.getUpdateUserIdList());
            //可修改人员
            vo.setUpdateUserNameList(en.getUpdateUserNameList());
            //可删除人员id
            vo.setDeleteUserIdList(en.getDeleteUserIdList());
            //可删除人员
            vo.setDeleteUserNameList(en.getDeleteUserNameList());
            if (filesEntity != null){
                //文件大小
                vo.setSize( (filesEntity.getSize() / 1024) );
                //文件类型
                vo.setExt(filesEntity.getExt());
                //文件存储url
                vo.setSourceFile(filesEntity.getSourceFile());
            }
            voList.add(vo);
        }
        //查询表格总行数
        int count = iVeOaDocumentMapper.selectCount(mainWrapper);
        //把查出来的东西存到map里面去
        map.put("list",voList);
        map.put("count",count);
        return map;
    }

    //逻辑删除（单/多）
    //每个id查有无下级  递归  （用id的集合 查是否为文件夹）
    //判断权限 1.上传人者是否为本人 2是否共享 ，否就不能操作 3.可CRUD人员id字段里有无自己的USERID
    // 文件夹时  查文件夹所在where ID = 当前ID时的父级ID 的可删除人员id，有就调用自己删
    // 文件时    where ID =  当前选中文件ID的可删除人员id，有就删
    // 最后删自己
    @Override
    public Integer deleteDocument(Long id) {
        //获取redis存的用户值
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        Integer result = 0;

            //查出下级id
            QueryWrapper<VeOaDocumentEntity> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("PARENT_ID",id);
            List<VeOaDocumentEntity> sublist = iVeOaDocumentMapper.selectList(queryWrapper);
            for (int i=0;i<sublist.size();i++){
                //是文件时
                if (sublist.get(i).getIdType() == 1){
                    iVeOaDocumentMapper.deleteById(sublist.get(i).getId());

                }

                //是文件夹时
                if (sublist.get(i).getIdType() == 0){

                    //调用自己
                    iVeOaPersonDocumentService.deleteDocument(sublist.get(i).getId());
                }

            }

        //删除自己
        result = iVeOaDocumentMapper.deleteById(id);

        return result;
    }


    //可删除权限  单/多
    @Override
    public Integer checkDeletePower(Long id) {
        Integer result = 0;
        //获取redis存的用户值
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        VeOaDocumentEntity veOaDocumentEntity = iVeOaDocumentMapper.selectById(id);
        //先判断上传人是否为本人  是，直接删，否再判断
        if (veOaDocumentEntity.getCreateUserId().equals(userId)){
            //返回可删除信息
            result = 1;
            return result;
        }else {
            //判断是否共享，是，再判断权限，否，不能删除
            if (veOaDocumentEntity.getIsShare() == 0){
                //判断可删除权限，有对应id,可删，无，不可删
                String deleteUserIdList = veOaDocumentEntity.getDeleteUserIdList();
                if (deleteUserIdList.contains(userId) && deleteUserIdList != null){
                    //返回可删除信息
                    result = 1;
                    return result;
                }else if(deleteUserIdList == null || deleteUserIdList.equals("")){
                    result = 1; //可编辑
                    return result;
                }else {
                    result = 2; //不可编辑
                    return result;
                }

            }else {
                result = 0; //不共享
                return result;
            }

        }

    }

    //可增加文件（夹）权限  在文件夹下  单
    @Override
    public Integer checkAddDocDirPower(VeOaDocumentEntity veOaDocumentEntity) {
        Integer result = 0;
        //获取redis存的用户值
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        //判断当前所在文件夹的权限
        //当前父级ID为0  在最上级时,无拦截权限
        if(veOaDocumentEntity.getParentId() == 0){
            result = 1;
            return result;
        }
        //当前父级ID 不为0时，查父级文件夹的可添加权限
        QueryWrapper<VeOaDocumentEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("ID",veOaDocumentEntity.getParentId());
        VeOaDocumentEntity parDocumentEntity = iVeOaDocumentMapper.selectOne(queryWrapper);
        String addUserIdList = parDocumentEntity.getAddUserIdList();
        //先判断上传人是否为本人  是，可查看，否再判断
        if (parDocumentEntity.getCreateUserId().equals(userId)){
            //返回可查看信息
            result = 1;
            return result;
        }else {
            //判断是否共享，是，再判断权限，否，不能查看详情
            if (parDocumentEntity.getIsShare() == 0){
                if (addUserIdList.contains(userId) && addUserIdList != null){
                    result = 1;
                    return result;
                }else if(addUserIdList == null || addUserIdList.equals("")){
                    result = 1;
                    return result;
                }else {
                    result = 2;
                    return result;  //不可操作
                }
            }else {
                result = 0; //不共享
                return result;
            }
        }


    }

    //可查看详情 文件/文件夹  权限  单
    @Override
    public Integer checkSeeDetailPower(Long id) {
        Integer result = 0;
        //获取redis存的用户值
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        VeOaDocumentEntity veOaDocumentEntity = iVeOaDocumentMapper.selectById(id);
        //先判断上传人是否为本人  是，可查看，否再判断
        if (veOaDocumentEntity.getCreateUserId().equals(userId)){
            //返回可查看信息
            result = 1;
            return result;
        }else {
            //判断是否共享，是，再判断权限，否，不能查看详情
            if (veOaDocumentEntity.getIsShare() == 0){
                //判断可查看权限，有对应id,可删，无，不可查看详情
                String seeUserIdList = veOaDocumentEntity.getSeeUserIdList();
                if (seeUserIdList.contains(userId) && seeUserIdList != null){
                    //返回可查看信息
                    result = 1;
                    return result;
                }else if(seeUserIdList == null || seeUserIdList.equals("")){
                    result = 1;
                    return  result;
                }
                else {
                    result = 2; //不可编辑
                    return result;
                }

            }else {
                result = 0; //不共享
                return result;
            }

        }

    }

    //可修改文件/文件夹  权限   单
    @Override
    public Integer checkUpdatePower(Long id) {
        Integer result = 0;
        //获取redis存的用户值
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        System.out.println("登陆人id"+userId);

        VeOaDocumentEntity veOaDocumentEntity = iVeOaDocumentMapper.selectById(id);
        System.out.println("数据库加的上传用户id"+veOaDocumentEntity.getCreateUserId());
        //先判断上传人是否为本人  是，可修改，否再判断
        if (veOaDocumentEntity.getCreateUserId().equals(userId)){
            //返回可查看信息
            result = 1;
            return result;
        }else {
            //判断是否共享，是，再判断权限，否，不能修改
            if (veOaDocumentEntity.getIsShare() == 0){
                //判断可查看权限，有对应id,可删，无，不可修改
                String updateUserIdList = veOaDocumentEntity.getUpdateUserIdList();
                if (updateUserIdList.contains(userId) && updateUserIdList != null){
                    //返回可修改信息
                    result = 1;
                    return result;
                }else if(updateUserIdList == null || updateUserIdList.equals("")){
                    result = 1; //可编辑
                    return result;
                }else {
                    result = 2; //不可编辑
                    return result;
                }

            }else {
                result = 0; //不共享
                return result;
            }

        }


    }




}
